package com.own.demo.lwf.common.regex;/**
 * @author liwenfeng
 * @date 2022/8/13 0013
 * @apinote
 */

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @version v1.0
 * @Description:
 * @Author Administrator
 * @Date 2022/8/13 0013 12:13
 * @copyright 李文峰
 */
public class RegexDemo {
    public static void main(String[] args) {

        // 正则匹配判断
        String s = "I am noob" + "from runoob.com.";
        String s2 = "541145656";
        String regex =  ".*runoob.*";
        String regex2 =  "\\d{9}";
        Boolean b = Pattern.matches(regex,s);
        Boolean b2= Pattern.matches(regex2,s2);
        System.out.println("字符串中是否包含了 'runoob' 子字符串? "+b);
        System.out.println(b2);

      // 捕获组
        // 按指定模式在字符串查找
        String line = "This order was placed for QT3000! OK?";
        String pattern = "(\\D*)(\\d+)(.*)";
        // 创建Pattern对象
        Pattern pattern1 = Pattern.compile(pattern);
        // 创建matcher对象
        Matcher matcher = pattern1.matcher(line);
          if(matcher.find()){
            System.out.println(matcher.group(0));
            System.out.println(matcher.group(1));
            System.out.println(matcher.group(2));
            System.out.println(matcher.group(3));
        }

    }
}
/*
     1.电话号码的正则

        电话号码由数字和“-”组成
        如果包含区号，那么区号为三位或四位，首位是0
        区号用“-”和其他数字分割
        除了区号，电话号码为7到8位
        手机号码为11位
        11位手机号码的前2位为“13”，“14”，“15”，“17”，“18”

        分析:
        电话号码分为固话和手机号，首先匹配固话，然后匹配手机号。

        固话的正则：regex=0\d{2,3}-\d{7,8}

        手机号的正则：regex=1[34578]\d{9}

        所以电话号码的正则：

        regex=(0\d{2,3}-\d{7,8})|(1[34578]\d{9})
*/
/*
    2.身份证号码的正则

         长度：15位或者18位
         如果是15位，则都是数字
         如果是18位，最后一位可能为数字或字母X

         分析:
         15位数字：regex=\d{15}

         18位数字：regex=\d{18}

         17位数字+X：regex=\d{17}X|x

         所以身份证号码的正则：

         regex=(^\d{15}$)|(^\d{18}$)|(^\d{17}X|x$)
 */
/*
    3.日期格式的正则
        日期格式：yyyy-mm-dd

        分析:

        4位的年，第一位只能是1或2，regex=^([12]\d{3})

        一年的12个月(01～09和1～12)，regex=^(0?[1-9]|1[0-2])

        一个月的31天(01～09和1～31)， regex=^((0?[1-9])|((1|2)[0-9])|30|31)

        所以 格式为 yyyy-mm-dd 的日期正则 regex=^([12]\d{3})-(0?[1-9]|1[0-2])-(0?[1-9]|((1|2)[0-9])|30|31)$

*/
/*
       ^(?![A-Za-z]+$)表示从头到位不能全是字母

       ^(?![0-9]+$)表示从头到位不能全是数字

       ^(?![@#$]+$)表示从头到位不能全是符号@#$

       ^[A-Za-z0-9@#$]{6,20}$表示从头到位只能是字母数字符号@#$的集合
*/